我有一个类,其中包含一个std::map指针作为成员。现在,我想以只读方式公开该成员:map和指向的对象都不允许修改。在内部,我需要这些指针是非常量的,并且我想将它们公开为常量。我确实有一个至少可以编译的解决方案,但我想知道我是否会遇到任何隐藏的问题。classA{public:conststd::map&GetMap()const{return*(reinterpret_cast*>(&m_Map));}private:std::mapm_Map;};我能想到一个可能的问题:如果std::map的内部布局对于指针映射和const指针映射不同,那么这将导致丑陋的错误。但我想不出任何理智
据我所知,当您调用c_str()/data()时,std::string会创建其内容的标识数组拷贝方法(有/没有终止NUL-char,在这里无关紧要)。不管怎样,对象是否也负责释放这个数组,还是我必须这样做?简而言之:std::stringhello("content");constchar*Ptr=hello.c_str();//useit....delete[]Ptr;////really???我只是想在内存分配方面保持安全。 最佳答案 不,您不需要释放ptr指针。ptr指向位于内部位置某处的不可修改字符串(实际上这是编译器的实
我对STL不是很好,我看到很少有帖子与我的要求相似,我很困惑。所以,我需要一些关于以下代码的建议。SomeStructsomeStruct(identifier);std::vector::iteratorit=std::find_if(vWrapper.begin(),vWrapper.end(),SomeStruct::Find_SomeStruct(&someStruct));if(it!=vWrapper.end()){...delete*it;it=vWrapper.erase(it);}我正在尝试根据标识符查看vector,然后删除指向存储在vector中的对象的指针。我看
我了解数组如何退化为指针。我明白,对于编译器来说,这是:voidfoo(int*arg1);100%等同于此:voidfoo(intarg1[]);是否应该优先选择一种风格?我想保持一致,但我很难证明这两个决定是正确的。虽然intmain(intargc,char*argv[])和intmain(intargc,char**argv)是一样的,但是前者好像更常见(如果我错了请纠正我)。 最佳答案 我会建议反对使用[]函数参数的语法。支持使用[]的一个论据是它以一种self记录的方式暗示指针应该指向不止一件事。例如:voidswap(
对于类X的非const成员函数,this指针的类型为X*const。然后,成员函数的this指针始终为const。那么,我们是否总是需要像这样进行const转换:voidfoo::p(){const_cast(member)=1;}我是不是漏掉了什么? 最佳答案 ForanonconstmemberfunctionofclassX,thispointerisoftypeX*const.不,非const成员函数中的this指针的类型只是X*(而且它是一个右值)。但即使this是X*const,这仍然不会阻止您更改数据成员。您的代码示例
我正在尝试一些非常简单的事情,本来应该很简单,但不知何故它让我很困惑......我试图理解++在被视为指针时对数组的影响以及在被视为数组时对指针的影响。所以,intmain(){inta[4]={1,4,7,9};*a=3;*(a+1)=4;*++a=4;//compilererror}1:所以在*(a+1)=4我们设置a[1]=4;//快乐的但是当*++a=4;时,我希望指针a递增1,因为++先于*然后*开始,我们使它等于4。但是这段代码只是行不通...这是为什么?另一个问题:intmain(){int*p=(int*)malloc(8);*p=5;printf("%d",p[0])
intmain(){intx=10;int*p=&x;int&y=*p;cout以上是最能解释我的问题的代码。通常,变量引用(&)获取变量的地址并开始引用该变量。我试过通过指针做同样的事情。我定义了一个变量,指针p指向x,引用变量y指向*p。这是否意味着y现在指的是同一个变量x?下一步,我不再通过*p指向x,现在引用变量y会发生什么?它会持有什么。在上面的代码中,cout谁能帮忙解释一下这里的行为。 最佳答案 [注意:这个答案只是关于C++的。在C中,您的代码不应编译。]是的,在你初始化y之后,它指的是x。递增p不会改变这一点——y
我一直在阅读book这表示通过指针算法访问数组元素比[]运算符快得多。总之this代码比this快代码。书中没有说为什么。是否建议使用此类指针算法,即使它可以显着提高速度?#includeusingnamespacestd;intmain(){//yourcodegoesheredouble*array=newdouble[1000000];for(inti=0;iusingnamespacestd;intmain(){//yourcodegoesheredouble*array=newdouble[1000000];for(inti=0;i编辑:引自书第369页,倒数第二行Thepo
我在处理指针时遇到了一个问题。到目前为止,我知道当我们创建任何数据类型的数组时,数组的名称实际上是一个指向数组第一个索引的指针(可能是静态指针)。对吗?所以我想要实现的是创建另一个指针,它可以保存数组名称的地址(即指向另一个指针的指针,在我的例子中是数组名称)例如:charname[]="ABCD";//nameholdingtheaddressofname[0]char*ptr1=name;//Whenthisispossiblechar**ptr2=&name;//Whynotthis.Itgivemeerrorthatcannotconvertchar(*)[5]tochar**
在为int数据类型创建指针数组时,以下代码有效:intvar[]={10,100,200,1000};int*ptr[]={&var[0],&var[1],&var[2],&var[3]};在为char数据类型创建指针数组时,以下是合法的:char*names[]={"MathewEmerson","BobJackson"};但是如果我为int数据类型创建一个指针数组,如下所示:intvar[]={10,100,200,1000};int*ptr[]={var[0],var[1],var[2],var[3]};我收到一个编译器错误。我明白为什么我在上述int数据类型数组的声明方法中遇到